最近又在折腾我之前的Android项目了,再次重写,使用不同的控件,由浅入深,尝试转向开发岗[1]。
关于在百度地图上踩的keystore的坑以及解决方案,都在这里一并记录。希望可以节省你的时间。
关于我练手项目的尝试经历,可以查看相关标签中关于地图与音乐的文章:Android开发
场景:2020年7月,我创建过一个Keystore,今日通过如下命令[2]创建keystore,发生错误。
以下的解决方案,其中部分整合了参考链接中的内容与相应软件的命令,我在此对原作者表示感谢。
报错
密钥库不存在
Android的终端输入:keytool -list -v -keystore debug.keystore
提示:密钥库不存在,但在Mac路径〜/.android/debug.keystore
中,有debug.keystore文件。
解决方案
在终端使用如下命令重建keystore:
keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000
重建文件,则百度地图后台需要再次提交。
keystore password was incorrect
Execution failed for task ‘:app:packageDebug’.
A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable
com.android.ide.common.signing.KeytoolException: Failed to read key AndroidDebugKey from store “/Users/felixxiong/.android/debug.keyst··ore”: keystore password was incorrect
Cause: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
原因:keystore密码错误
场景:在Mac路径〜/.android/debug.keystore
中,有debug.keystore文件,在Android运行时签名报错。
解决方案
使用以下三个命令可修改keystore参数(其中my.keystore
为复制后的新keystore):
修改密码:keytool -storepasswd -keystore android.keystore
修改别名alias:keytool -changealias -keystore android.keystore -alias my_name -destalias androiddebugkey
修改alias密码:keytool -keypasswd -keystore my.keystore -alias androiddebugkey
keystore的种类
目前发现,keystore有PKCS12与SHA256withRSA两种。
如果 -storetype 为 PKCS12
尝试修改密码,继续报错:
keytool 错误: java.lang.UnsupportedOperationException: 如果 -storetype 为 PKCS12, 则不支持 -keypasswd 命令
如果 -storetype 为 SHA256withRSA
此处我通过Android Studio - Build - Generate Singed -Bundle / APK创建的keystore。
Warning:JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore debug.keystore -destkeystore debug.keystore -deststoretype pkcs12” 迁移到行业标准格式 PKCS12。
便于复制的命令:
keytool -importkeystore -srckeystore debug.keystore -destkeystore debug.keystore -deststoretype pkcs12
此处经测试,当keystore的type为SHA256withRSA时,可以使用上述三个命令。
找回key相关
日志找回
如果你使用AS生成过,则可通过log方式查看。
Windows:C:\Users\UserName(当前系统的用户名),AndroidStudioX.X > system > log-idea.log-injected.signing.store
Mac:Terminal- ~/Library/Logs -> AndroidStudioBeta ->idea.log.1 (or any old log number)-injected.signing.store
使用软件破解密码
-
下载Android-keystore-password-recover,获得jar包,放置在桌面。
-
创建你所熟悉的密码词表,以txt格式结尾,放置在桌面。
-
使用字典破解或智能破解方式:
-
# 字典破解 java -jar Android_Keystore_Password_Recover_1.07.jar -m 2 -k "C:\\mykeystore.keystore" -d "passlib.txt" #智能破解 java -jar Android_Keystore_Password_Recover_1.07.jar -m 3 -k "C:\\mykeystore.keystore" -d "passlib.txt" # Android_Keystore_Password_Recover_1.07.jar 为软件名称 # "C:\\mykeystore.keystore"为keystore路径 # "passlib.txt"为你所熟悉的密码词表的txt文档的名称
报错
Exception in thread “main” java.io.FileNotFoundException: Users/felixxiong/Desktop/mykeystore.keystore (No such file or directory)
可能是Mac的文件编写路径错误。
文件在桌面的终端路径写法为:Users/youraccountname/Desktop/xxx.keystore
java.io.IOException: not a JavaKeyStore
后续更新。
如果你有解决方案,欢迎在评论里留言~
参考链接:
[TUT] Change alias passwords of your Android Keystore
Android 找回签名证书Key Alias 和 Key Password